<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
<title>Buildmaster documentation</title>
<meta name="author" content="Steven Mohr" />
<meta name="date" content="$Date$" />
<style type="text/css">

/*
:Author: David Goodger
:Contact: goodger@users.sourceforge.net
:Date: $Date: 2005-12-18 01:56:14 +0100 (Sun, 18 Dec 2005) $
:Revision: $Revision: 4224 $
:Copyright: This stylesheet has been placed in the public domain.

Default cascading style sheet for the HTML output of Docutils.

See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/

/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
  border: 0 }

table.borderless td, table.borderless th {
  /* Override padding for "table.docutils td" with "! important".
     The right padding separates the table cells. */
  padding: 0 0.5em 0 0 ! important }

.first {
  /* Override more specific margin styles with "! important". */
  margin-top: 0 ! important }

.last, .with-subtitle {
  margin-bottom: 0 ! important }

.hidden {
  display: none }

a.toc-backref {
  text-decoration: none ;
  color: black }

blockquote.epigraph {
  margin: 2em 5em ; }

dl.docutils dd {
  margin-bottom: 0.5em }

/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
  font-weight: bold }
*/

div.abstract {
  margin: 2em 5em }

div.abstract p.topic-title {
  font-weight: bold ;
  text-align: center }

div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
  margin: 2em ;
  border: medium outset ;
  padding: 1em }

div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
  font-weight: bold ;
  font-family: sans-serif }

div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title {
  color: red ;
  font-weight: bold ;
  font-family: sans-serif }

/* Uncomment (and remove this text!) to get reduced vertical space in
   compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
  margin-bottom: 0.5em }

div.compound .compound-last, div.compound .compound-middle {
  margin-top: 0.5em }
*/

div.dedication {
  margin: 2em 5em ;
  text-align: center ;
  font-style: italic }

div.dedication p.topic-title {
  font-weight: bold ;
  font-style: normal }

div.figure {
  margin-left: 2em ;
  margin-right: 2em }

div.footer, div.header {
  clear: both;
  font-size: smaller }

div.line-block {
  display: block ;
  margin-top: 1em ;
  margin-bottom: 1em }

div.line-block div.line-block {
  margin-top: 0 ;
  margin-bottom: 0 ;
  margin-left: 1.5em }

div.sidebar {
  margin-left: 1em ;
  border: medium outset ;
  padding: 1em ;
  background-color: #ffffee ;
  width: 40% ;
  float: right ;
  clear: right }

div.sidebar p.rubric {
  font-family: sans-serif ;
  font-size: medium }

div.system-messages {
  margin: 5em }

div.system-messages h1 {
  color: red }

div.system-message {
  border: medium outset ;
  padding: 1em }

div.system-message p.system-message-title {
  color: red ;
  font-weight: bold }

div.topic {
  margin: 2em }

h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
  margin-top: 0.4em }

h1.title {
  text-align: center }

h2.subtitle {
  text-align: center }

hr.docutils {
  width: 75% }

img.align-left {
  clear: left }

img.align-right {
  clear: right }

ol.simple, ul.simple {
  margin-bottom: 1em }

ol.arabic {
  list-style: decimal }

ol.loweralpha {
  list-style: lower-alpha }

ol.upperalpha {
  list-style: upper-alpha }

ol.lowerroman {
  list-style: lower-roman }

ol.upperroman {
  list-style: upper-roman }

p.attribution {
  text-align: right ;
  margin-left: 50% }

p.caption {
  font-style: italic }

p.credits {
  font-style: italic ;
  font-size: smaller }

p.label {
  white-space: nowrap }

p.rubric {
  font-weight: bold ;
  font-size: larger ;
  color: maroon ;
  text-align: center }

p.sidebar-title {
  font-family: sans-serif ;
  font-weight: bold ;
  font-size: larger }

p.sidebar-subtitle {
  font-family: sans-serif ;
  font-weight: bold }

p.topic-title {
  font-weight: bold }

pre.address {
  margin-bottom: 0 ;
  margin-top: 0 ;
  font-family: serif ;
  font-size: 100% }

pre.literal-block, pre.doctest-block {
  margin-left: 2em ;
  margin-right: 2em ;
  background-color: #eeeeee }

span.classifier {
  font-family: sans-serif ;
  font-style: oblique }

span.classifier-delimiter {
  font-family: sans-serif ;
  font-weight: bold }

span.interpreted {
  font-family: sans-serif }

span.option {
  white-space: nowrap }

span.pre {
  white-space: pre }

span.problematic {
  color: red }

span.section-subtitle {
  /* font-size relative to parent (h1..h6 element) */
  font-size: 80% }

table.citation {
  border-left: solid 1px gray;
  margin-left: 1px }

table.docinfo {
  margin: 2em 4em }

table.docutils {
  margin-top: 0.5em ;
  margin-bottom: 0.5em }

table.footnote {
  border-left: solid 1px black;
  margin-left: 1px }

table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
  padding-left: 0.5em ;
  padding-right: 0.5em ;
  vertical-align: top }

table.docutils th.field-name, table.docinfo th.docinfo-name {
  font-weight: bold ;
  text-align: left ;
  white-space: nowrap ;
  padding-left: 0 }

h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
  font-size: 100% }

tt.docutils {
  background-color: #eeeeee }

ul.auto-toc {
  list-style-type: none }

</style>
</head>
<body>
<div class="document" id="buildmaster-documentation">
<h1 class="title">Buildmaster documentation</h1>
<table class="docinfo" frame="void" rules="none">
<col class="docinfo-name" />
<col class="docinfo-content" />
<tbody valign="top">
<tr><th class="docinfo-name">Author:</th>
<td>Steven Mohr</td></tr>
<tr><th class="docinfo-name">Date:</th>
<td>$Date$</td></tr>
<tr><th class="docinfo-name">Revision:</th>
<td>$Rev$</td></tr>
<tr><th class="docinfo-name">Status:</th>
<td>Draft</td></tr>
</tbody>
</table>
<div class="contents topic">
<p class="topic-title first"><a id="contents" name="contents">Contents</a></p>
<ul class="simple">
<li><a class="reference" href="#config-files" id="id1" name="id1">Config files</a><ul>
<li><a class="reference" href="#slaves-cfg" id="id2" name="id2">slaves.cfg</a><ul>
<li><a class="reference" href="#config-options" id="id3" name="id3">config options</a></li>
</ul>
</li>
<li><a class="reference" href="#master-cfg" id="id4" name="id4">master.cfg</a></li>
</ul>
</li>
<li><a class="reference" href="#scripts" id="id5" name="id5">Scripts</a><ul>
<li><a class="reference" href="#tgbuilder-py" id="id6" name="id6">tgbuilder.py</a></li>
<li><a class="reference" href="#ppath-py" id="id7" name="id7">ppath.py</a></li>
<li><a class="reference" href="#autobuild-quickstarts-py" id="id8" name="id8">autobuild_quickstarts.py</a></li>
</ul>
</li>
<li><a class="reference" href="#new-build-steps" id="id9" name="id9">New build steps</a><ul>
<li><a class="reference" href="#common-parameter" id="id10" name="id10">Common parameter</a></li>
<li><a class="reference" href="#virtualenv" id="id11" name="id11">VirtualEnv</a></li>
<li><a class="reference" href="#python" id="id12" name="id12">Python</a></li>
<li><a class="reference" href="#runsetup" id="id13" name="id13">RunSetup</a></li>
<li><a class="reference" href="#easyinstall" id="id14" name="id14">EasyInstall</a></li>
<li><a class="reference" href="#nose" id="id15" name="id15">Nose</a></li>
<li><a class="reference" href="#buildegg" id="id16" name="id16">BuildEgg</a></li>
<li><a class="reference" href="#buildeggee" id="id17" name="id17">BuildEggEE</a></li>
<li><a class="reference" href="#interosshell" id="id18" name="id18">InterOSShell</a></li>
<li><a class="reference" href="#paver" id="id19" name="id19">Paver</a></li>
<li><a class="reference" href="#cleandir" id="id20" name="id20">CleanDir</a></li>
<li><a class="reference" href="#uploadegg" id="id21" name="id21">UploadEgg</a></li>
</ul>
</li>
</ul>
</div>
<div class="section">
<h1><a class="toc-backref" href="#id1" id="config-files" name="config-files">Config files</a></h1>
<div class="section">
<h2><a class="toc-backref" href="#id2" id="slaves-cfg" name="slaves-cfg">slaves.cfg</a></h2>
<p>This file contains a list of all slaves with their passwords. The structure is very simple. It's just one line per slave which contains the name and the password
seperated a space. Pay attention that the last line isn't empty.</p>
<div class="section">
<h3><a class="toc-backref" href="#id3" id="config-options" name="config-options">config options</a></h3>
</div>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id4" id="master-cfg" name="master-cfg">master.cfg</a></h2>
<p>This is the config file of the build master. This file is interpreted by the python interpreter so you can use all python commands you want to.
To keep this file short and simple the definition of the build task takes place in tgbuilder.py</p>
</div>
</div>
<div class="section">
<h1><a class="toc-backref" href="#id5" id="scripts" name="scripts">Scripts</a></h1>
<div class="section">
<h2><a class="toc-backref" href="#id6" id="tgbuilder-py" name="tgbuilder-py">tgbuilder.py</a></h2>
<p>tgbuilder.py contains all builder (TG1, TG1.1, TG2, dependencies via SVN or easy_install) and some functions.</p>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id7" id="ppath-py" name="ppath-py">ppath.py</a></h2>
<p>ppath.py contains functions to manipulate the python path.</p>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id8" id="autobuild-quickstarts-py" name="autobuild-quickstarts-py">autobuild_quickstarts.py</a></h2>
<p>This scripts creates all possible quickstart projects. It combines Identity (enabled/diabled), Kid/Genshi and SQLObject/Elixir/Alchemy.</p>
</div>
</div>
<div class="section">
<h1><a class="toc-backref" href="#id9" id="new-build-steps" name="new-build-steps">New build steps</a></h1>
<p>There are a few new build steps to simplify the creation of new builders.</p>
<div class="section">
<h2><a class="toc-backref" href="#id10" id="common-parameter" name="common-parameter">Common parameter</a></h2>
<p>This parameter is optional.</p>
<dl class="docutils">
<dt>workdir</dt>
<dd>directory to work in. The base is root directory of the build task.</dd>
</dl>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id11" id="virtualenv" name="virtualenv">VirtualEnv</a></h2>
<p>This buildstep creates a virtual environment.</p>
<dl class="docutils">
<dt>workdir</dt>
<dd>workdir is the only required parameter for this step. You can (or should) use relative paths.</dd>
</dl>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id12" id="python" name="python">Python</a></h2>
<p>This buildstep runs a python script on the slave side.</p>
<dl class="docutils">
<dt>script</dt>
<dd>the script to execute</dd>
<dt>script_args</dt>
<dd>arguments passed to the script (optional)</dd>
</dl>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id13" id="runsetup" name="runsetup">RunSetup</a></h2>
<p>This step executes a setup.py script with &quot;install&quot; as a argument.</p>
<dl class="docutils">
<dt>devmode</dt>
<dd>If devmode is set RunSetup uses the 'develop' argument instead of 'install'</dd>
</dl>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id14" id="easyinstall" name="easyinstall">EasyInstall</a></h2>
<p>This buildstep installs a package via easy_install.</p>
<dl class="docutils">
<dt>package</dt>
<dd>name of the package</dd>
<dt>workdir</dt>
<dd>the workdir is for this step is the build directory. It can't be modified.</dd>
<dt>localinstall</dt>
<dd>installs an egg which is present in workdir or in workdir/dist</dd>
</dl>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id15" id="nose" name="nose">Nose</a></h2>
<p>This buildsteps runs nose in the specified directory.</p>
<dl class="docutils">
<dt>testdir</dt>
<dd>this is a directory relative to the workdir where nose starts to search for test cases</dd>
<dt>workdir</dt>
<dd>workdir has to be set for this step.</dd>
<dt>verbose</dt>
<dd>This argument sets the 'verbose' flag for nose.</dd>
</dl>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id16" id="buildegg" name="buildegg">BuildEgg</a></h2>
<p>This buildstep builds an egg.</p>
<dl class="docutils">
<dt>workdir</dt>
<dd>workdir has to be set for this step</dd>
</dl>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id17" id="buildeggee" name="buildeggee">BuildEggEE</a></h2>
<p>This step downloads the source via EasyInstall and  builds an egg.</p>
<dl class="docutils">
<dt>package</dt>
<dd>name of the package which egg should be created</dd>
</dl>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id18" id="interosshell" name="interosshell">InterOSShell</a></h2>
<p>This step is equal to ShellCommand but it corrects OS-specific path seperators.</p>
<dl class="docutils">
<dt>command</dt>
<dd>the command which should be executed on the slave side</dd>
</dl>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id19" id="paver" name="paver">Paver</a></h2>
<p>This step runs paver with the specified options</p>
<dl class="docutils">
<dt>mode</dt>
<dd>specifies the mode to start paver</dd>
</dl>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id20" id="cleandir" name="cleandir">CleanDir</a></h2>
<p>This steps deletes all files in workdir.</p>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id21" id="uploadegg" name="uploadegg">UploadEgg</a></h2>
<p>Uploads an egg to Turbogears PackageIndex. It uses the .pypirc in the home directory of the user to
authorize the upload.</p>
<dl class="docutils">
<dt>package</dt>
<dd>name of the package name which should be uploaded</dd>
</dl>
</div>
</div>
</div>
</body>
</html>
